www.gusucode.com > VC++ 特殊网址访问器源代码-源码程序 > VC++ 特殊网址访问器源代码-源码程序/code/Demo3/MainFrm.cpp
// MainFrm.cpp : implementation of the CMainFrame class // Download by http://www.NewXing.com #include "stdafx.h" #include "Demo03.h" #include "MainFrm.h" //增加Demo03View的引用声明 #include "Demo03View.h" //增加cUrlDlg的引用声明 #include "UrlDlg.h" //增加CDomainDaoSet的引用声明 #include "DomainDaoSet.h" //增加CLogDaoSet的引用声明 #include "LogDaoSet.h" //增加LogDlg的引用声明 #include "LogDlg.h" //增加图片处理类的引用声明 #include "SaveScrJpg.h" //增加LogSetDlg的引用声明 #include "UrlSetDlg.h" //增加CheckSetDlg的引用声明 #include "CheckSetDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CMainFrame IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd) BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) //{{AFX_MSG_MAP(CMainFrame) ON_WM_CREATE() ON_COMMAND(ID_MENU_BROWSER, OnMenuBrowser) ON_COMMAND(ID_MENU_LOG, OnMenuLog) ON_COMMAND(ID_MENU_URL_SET, OnMenuUrlSet) //手动添加的两条消息映射 ON_MESSAGE(WM_SET_CHECK_URL,OnSetCheckPic) ON_MESSAGE(WM_SET_CHECK_PIC,OnSetCheckUrl) ON_COMMAND(ID_MENU_CHECK_SET, OnMenuCheckSet) //}}AFX_MSG_MAP END_MESSAGE_MAP() static UINT indicators[] = { ID_SEPARATOR, // status line indicator ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, }; ///////////////////////////////////////////////////////////////////////////// // CMainFrame construction/destruction CMainFrame::CMainFrame() { // TODO: add member initialization code here m_bIsCheckUrl = TRUE; m_bIsCheckUrl = TRUE; } CMainFrame::~CMainFrame() { } int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; /* if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create } if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) { TRACE0("Failed to create status bar\n"); return -1; // fail to create } // TODO: Delete these three lines if you don't want the toolbar to // be dockable m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar); */ return 0; } BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE; // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs //定义相关变量 HKEY hDir = 0 ; BYTE strStatus[10]; DWORD dwType = REG_SZ; DWORD dwSize = sizeof(strStatus); //初始化strStatus memset(strStatus,0,dwSize); //打开注册表 if( RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Demo03", NULL, KEY_ALL_ACCESS, &hDir) == ERROR_SUCCESS) { //如果打开注册表项成功,获取键值,赋初值 if( RegQueryValueEx( hDir, "bIsCheckUrl", NULL, &dwType, strStatus, &dwSize ) == ERROR_SUCCESS ) { //memcpy(strNum2,strNum,sizeof(strNum2)); m_bIsCheckUrl = (BOOL)atoi((char *)strStatus); } else { m_bIsCheckUrl = TRUE; //默认为启动检测 } if( RegQueryValueEx( hDir, "bIsCheckPic", NULL, &dwType, strStatus, &dwSize ) == ERROR_SUCCESS ) { //memcpy(strNum2,strNum,sizeof(strNum2)); m_bIsCheckPic = (BOOL)atoi((char *)strStatus); } else { m_bIsCheckPic = TRUE; //默认为启动检测 } RegCloseKey(hDir); } else { //如果打开注册表项失败,给默认值. m_bIsCheckUrl = TRUE; m_bIsCheckPic = TRUE; } return TRUE; } ///////////////////////////////////////////////////////////////////////////// // CMainFrame diagnostics #ifdef _DEBUG void CMainFrame::AssertValid() const { CFrameWnd::AssertValid(); } void CMainFrame::Dump(CDumpContext& dc) const { CFrameWnd::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CMainFrame message handlers void CMainFrame::OnMenuBrowser() { // TODO: Add your command handler code here CUrlDlg m_UrlDlg; //弹出网址对话框,取消则退出 if(m_UrlDlg.DoModal() != IDOK) return; //---------确定则显示该页面 //如果当前不进行网址检测,则显示用户申请的网页,后面的查询不再进行 if(!m_bIsCheckUrl) { m_pHtmlView->GoUrl(m_UrlDlg.m_strUrl); return; } //确定则进行网址解析 char szURL[255]; //将用户输入的网址复制到szURL中 memcpy(szURL,m_UrlDlg.m_strUrl.operator LPCTSTR(),sizeof(char[255])); //末尾置零避免出事 szURL[254] = '\0'; //解析网址为域名 GetValidIPAddr(szURL); //判断网址是否在数据库中存在 CDomainDaoSet m_DomainDaoSet; CString m_strSql; BOOL m_Flag = FALSE; try { if(m_DomainDaoSet.IsOpen()) m_DomainDaoSet.Close(); //标准的SQL语句 m_strSql.Format("select * from pDomain where DomainName = '%s'",szURL); m_DomainDaoSet.Open(AFX_DAO_USE_DEFAULT_TYPE,m_strSql,0); //输出匹配上查询条件用户记录,直到记录为空 if(!m_DomainDaoSet.IsEOF()) m_Flag = TRUE; //关闭记录集 if(m_DomainDaoSet.IsOpen()) m_DomainDaoSet.Close(); } //意外捕获 catch(CDaoException*e) { e->ReportError (); //e->Delete (); return; } if(m_Flag) { //保存屏幕 //SaveScrJpg m_PicSave; //m_PicSave.SaveScreen(0); //如果当前保存屏幕,则进行相应操作屏幕 if(m_bIsCheckUrl) { SaveScrJpg m_PicSave; m_PicSave.SaveScreen(0); } CLogDaoSet m_LogDaoSet; if(m_DomainDaoSet.IsOpen()) m_DomainDaoSet.Close(); //此处我们预留LogType 0,1为程序启动退出,2为非法网址访问记录 try { //m_strSql.Format("Insert Into pLog(LogType,LogInfo,LogPicFlag) values(2,'%s',0)",szURL); m_LogDaoSet.Open(AFX_DAO_USE_DEFAULT_TYPE,NULL,0); m_LogDaoSet.AddNew(); //然后编辑该条记录的内容 m_LogDaoSet.m_LogType = 2; m_LogDaoSet.m_LogInfo = szURL; //m_LogDaoSet.m_LogPicFlag = 0; //m_LogDaoSet.m_LogPicFlag = 1; m_LogDaoSet.m_LogPicFlag = 0; //如果当前保存屏幕,则进行相应操作屏幕 if(m_bIsCheckUrl) { //设定记录为:保存了图片; m_LogDaoSet.m_LogPicFlag = 1; //创建一个CFile来读取截屏文件内容 CFile m_PicFile; //如果打开屏幕文件成功, if(m_PicFile.Open("C:\\0.jpg",CFile::modeRead,NULL)) { // m_LogDaoSet.m_LogPic.m_dwDataLength = m_PicFile.GetLength(); // m_PicFile.ReadHuge(m_LogDaoSet.m_LogPic.m_hData,m_PicFile.GetLength()); } m_PicFile.Close(); } //更新时,要判断当前是否能够进行更新操作 if(m_LogDaoSet.CanUpdate()) { m_LogDaoSet.Update(); } //关闭记录集 if(m_LogDaoSet.IsOpen()) m_LogDaoSet.Close(); } catch(CDaoException*e) { e->ReportError (); //e->Delete (); return; } AfxMessageBox("您访问的网址不被允许!"); } else m_pHtmlView->GoUrl(m_UrlDlg.m_strUrl); } void CMainFrame::GetValidIPAddr(char *szIPAddress) { //以下解析,纯属算法问题,与数据库操作无关 //基本思想:将URL访问的http://头和www.去掉,剩下部分作为域名 //算法是否有效这里不需要深究 int i,nLength=strlen(szIPAddress); int nPos=0; for(i=0;i<nLength;i++) szIPAddress[i]=tolower(szIPAddress[i]); if(nLength>=7 && (strncmp("http://",szIPAddress,7)==0)){ nPos+=7; nLength-=7; } if(nLength>=4 && (strncmp("www.",szIPAddress+nPos,4)==0)){ nPos+=4; nLength-=4; } if(nPos!=0){ for(i=0;i<nLength;i++) szIPAddress[i]=szIPAddress[i+nPos]; szIPAddress[nLength]=0; } char *c=strchr(szIPAddress,':'); if(c!=NULL) *c=0; c=strchr(szIPAddress,'/'); if(c!=NULL) *c=0; return; } void CMainFrame::OnMenuLog() { // TODO: Add your command handler code here CLogDlg m_LogDlg; m_LogDlg.DoModal(); } void CMainFrame::OnMenuUrlSet() { // TODO: Add your command handler code here CUrlSetDlg m_UrlSetDlg; m_UrlSetDlg.DoModal(); } void CMainFrame::OnSetCheckUrl(WPARAM wParam, LPARAM lParam) { m_bIsCheckUrl = (BOOL)wParam; } void CMainFrame::OnSetCheckPic(WPARAM wParam, LPARAM lParam) { m_bIsCheckUrl = (BOOL)wParam; } void CMainFrame::OnMenuCheckSet() { // TODO: Add your command handler code here CCheckSetDlg m_CheckSetDlg; m_CheckSetDlg.DoModal(); }